package marketing

import (
	"jlpay-sdk-go/pkg/jlpay/models"
)

// MerchantActivityUpdateRequest 商户活动修改请求
type MerchantActivityUpdateRequest struct {
	models.OrgBaseRequest
	// ActID 活动ID
	ActID string `json:"act_id,omitempty"`
	// MerchNo 商户号
	MerchNo string `json:"merch_no,omitempty"`
	// Status 商户状态
	Status string `json:"status,omitempty"`
	// StartTime 商户活动开始时间，格式yyyy-MM-dd HH:mm:ss
	StartTime string `json:"start_time,omitempty"`
	// EndTime 商户活动结束时间，格式yyyy-MM-dd HH:mm:ss
	EndTime string `json:"end_time,omitempty"`
	// UpdateQuotas 商户额度信息
	UpdateQuotas []*MerchantQuotaInfo `json:"update_quotas,omitempty"`
}

// NewMerchantActivityUpdateRequest 创建新的商户活动修改请求
func NewMerchantActivityUpdateRequest() *MerchantActivityUpdateRequest {
	return &MerchantActivityUpdateRequest{}
}

// SetActID 设置活动ID
func (m *MerchantActivityUpdateRequest) SetActID(actID string) *MerchantActivityUpdateRequest {
	m.ActID = actID
	return m
}

// SetMerchNo 设置商户号
func (m *MerchantActivityUpdateRequest) SetMerchNo(merchNo string) *MerchantActivityUpdateRequest {
	m.MerchNo = merchNo
	return m
}

// SetStatus 设置商户状态
func (m *MerchantActivityUpdateRequest) SetStatus(status string) *MerchantActivityUpdateRequest {
	m.Status = status
	return m
}

// SetStartTime 设置商户活动开始时间
func (m *MerchantActivityUpdateRequest) SetStartTime(startTime string) *MerchantActivityUpdateRequest {
	m.StartTime = startTime
	return m
}

// SetEndTime 设置商户活动结束时间
func (m *MerchantActivityUpdateRequest) SetEndTime(endTime string) *MerchantActivityUpdateRequest {
	m.EndTime = endTime
	return m
}

// SetUpdateQuotas 设置商户额度信息
func (m *MerchantActivityUpdateRequest) SetUpdateQuotas(updateQuotas []*MerchantQuotaInfo) *MerchantActivityUpdateRequest {
	m.UpdateQuotas = updateQuotas
	return m
}

// Path 获取接口路径
func (m *MerchantActivityUpdateRequest) Path() string {
	return "/open/org/bank/act-bridge/act-merch-relation/update"
}

// ToMap 将请求对象转换为字典，过滤掉值为空的字段
func (m *MerchantActivityUpdateRequest) ToMap() (map[string]interface{}, error) {
	data, err := m.OrgBaseRequest.ToMap()
	if err != nil {
		return nil, err
	}

	// 添加当前字段
	if m.ActID != "" {
		data["act_id"] = m.ActID
	}
	if m.MerchNo != "" {
		data["merch_no"] = m.MerchNo
	}
	if m.Status != "" {
		data["status"] = m.Status
	}
	if m.StartTime != "" {
		data["start_time"] = m.StartTime
	}
	if m.EndTime != "" {
		data["end_time"] = m.EndTime
	}
	if len(m.UpdateQuotas) > 0 {
		quotaMaps := make([]map[string]interface{}, 0, len(m.UpdateQuotas))
		for _, quota := range m.UpdateQuotas {
			if quotaMap, err := quota.ToMap(); err == nil {
				quotaMaps = append(quotaMaps, quotaMap)
			}
		}
		if len(quotaMaps) > 0 {
			data["update_quotas"] = quotaMaps
		}
	}

	return data, nil
}

// MerchantActivityUpdateResponse 商户活动更新响应
type MerchantActivityUpdateResponse struct {
	models.StandardResponse
}

// NewMerchantActivityUpdateResponse 创建商户活动更新响应
func NewMerchantActivityUpdateResponse() *MerchantActivityUpdateResponse {
	return &MerchantActivityUpdateResponse{}
}
